home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Telnet / NCSA / tn3270 2.3d26 source / tn3270 / menu.c < prev    next >
Text File  |  1991-05-29  |  12KB  |  459 lines

  1. /*
  2.  *  tn3270 for the Macintosh Source Code
  3.  *  Brown University Computing and Information Services
  4.  *  Version 2.3d21, January 17, 1991
  5.  *  Copyright (c) 1988, 1989, 1990, 1991 by Brown University and by
  6.  *  Peter John DiCamillo.
  7.  *
  8.  *  Permission is granted to any individual or institution to use, copy,
  9.  *  or redistribute the binary version of this software and its
  10.  *  documentation provided this notice and the copyright notices are
  11.  *  retained.  Permission is granted to any individual or non-profit
  12.  *  institution to use, copy, modify, or redistribute the source files
  13.  *  of this software provided this notice and the copyright notices are
  14.  *  retained.  This software may not be distributed for profit, either
  15.  *  in original form or in derivative works, nor can the source be
  16.  *  distributed to other than an individual or a non-profit institution.
  17.  *  Any  individual or group interested in seeing and/or using these
  18.  *  source files but who are prevented from doing so by the above
  19.  *  constraints should contact Don Wolfe, Assistant Vice-President for
  20.  *  Computer Systems at Brown University, (401) 863-7250, for possible
  21.  *  software licensing of the source developed at Brown.
  22.  *
  23.  *  Brown University and Peter John DiCamillo make no representations
  24.  *  about the suitability of this software for any purpose.
  25.  *
  26.  *  BROWN UNIVERSITY AND PETER JOHN DICAMILLO GIVE NO WARRANTY, EITHER
  27.  *  EXPRESS OR IMPLIED, FOR THE PROGRAM AND/OR DOCUMENTATION PROVIDED,
  28.  *  INCLUDING, WITHOUT LIMITATION, WARRANTY OF MERCHANTABILITY AND
  29.  *  WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE.
  30.  *
  31.  */
  32.  
  33. #define __SEG__ 3270seg2
  34. #include "maclib.h"
  35. #include "termdef.h"
  36. #include "globals.h"
  37.  
  38. #define langMenu    234
  39. #define kmapMenu    235
  40. #define appleMenu    256
  41. #define    fileMenu    257
  42. #define editMenu    258
  43. #define setMenu        259
  44. #define fkeyMenu    260
  45. #define netMenu        261
  46.  
  47. extern char vmxbgn;
  48. extern char kabort;
  49. extern char da_menu;
  50. extern char xdlg;
  51. extern DialogPtr xdlgptr;
  52. extern char pend_conn;
  53. extern int MacBinary;
  54. extern char showstg;
  55.  
  56. char ftpavail;
  57.  
  58. menu_upd()
  59. {
  60. short i, msize;
  61. char fullscreen;
  62. unsigned char itemname[256];
  63.  
  64. /* language menu */
  65.  
  66. msize = CountMItems(nlMenu);
  67. for (i=1; i <= msize; i++) {
  68.     GetItem(nlMenu, i, itemname);
  69.     CheckItem(nlMenu, i, strcmp(itemname, csnlname) == 0);
  70.     }
  71.  
  72. /* keyboard menu */
  73.  
  74. msize = CountMItems(kybdMenu);
  75. for (i=1; i <= msize; i++) {
  76.     GetItem(kybdMenu, i, itemname);
  77.     CheckItem(kybdMenu, i, strcmp(itemname, cskybdname) == 0);
  78.     }
  79.  
  80. /* file menu */
  81.  
  82. if (zoomstate() == inZoomOut) 
  83.     SetItem(myMenus[1], 4, "Zoom Out");
  84. else
  85.     SetItem(myMenus[1], 4, "Zoom In");
  86.  
  87. if (da_menu) {
  88.     DisableItem(myMenus[1], 1);
  89.     DisableItem(myMenus[1], 2);
  90.     DisableItem(myMenus[1], 4);
  91.     DisableItem(myMenus[1], 6);
  92.     DisableItem(myMenus[1], 7);
  93.     DisableItem(myMenus[1], 9);
  94.     DisableItem(myMenus[1], 11);
  95.     DisableItem(myMenus[1], 13);
  96.     DisableItem(myMenus[1], 14);
  97.     DisableItem(myMenus[1], 16);
  98.     DisableItem(myMenus[1], 17);
  99.     if (serflg) DisableItem(myMenus[1], 18);
  100.     CheckItem(myMenus[1], 19, 0);
  101.     }
  102. else {
  103.     if (serflg && connflg) {
  104.         DisableItem(myMenus[1], 1);
  105.         DisableItem(myMenus[1], 2);
  106.         }
  107.     else if (logon || (pend_conn > 0)) {
  108.         DisableItem(myMenus[1], 1);
  109.         EnableItem(myMenus[1], 2);
  110.         }
  111.     else {
  112.         EnableItem(myMenus[1], 1);
  113.         DisableItem(myMenus[1], 2);
  114.         }
  115.     if (zoomok && (myWindow != 0)) EnableItem(myMenus[1], 4);
  116.           else DisableItem(myMenus[1], 4);
  117.     EnableItem(myMenus[1], 6);
  118.     EnableItem(myMenus[1], 7);
  119.     EnableItem(myMenus[1], 9);
  120.     if (PictPtr != 0) EnableItem(myMenus[1], 11);
  121.                 else DisableItem(myMenus[1], 11);
  122.     CheckItem(myMenus[1], 11, savepict != 0);
  123.     EnableItem(myMenus[1], 13);
  124.     if (myWindow != 0) EnableItem(myMenus[1], 14);
  125.                   else DisableItem(myMenus[1], 14);
  126.     if (vmxbgn) EnableItem(myMenus[1], 16);
  127.           else DisableItem(myMenus[1], 16);
  128.     CheckItem(myMenus[1], 16, kabort != 0);
  129.     if (xdlg && (xdlgptr != FrontWindow()))
  130.         EnableItem(myMenus[1], 17);
  131.     else DisableItem(myMenus[1], 17);
  132.     if (serflg)
  133.         if (connflg) DisableItem(myMenus[1], 18);
  134.                 else EnableItem(myMenus[1], 18);
  135.     CheckItem(myMenus[1], 19, done != 0);
  136.     }
  137.     
  138. /* Edit menu */
  139.  
  140. if (da_menu) {
  141.     EnableItem(myMenus[2], 1);
  142.     EnableItem(myMenus[2], 3);
  143.     EnableItem(myMenus[2], 4);
  144.     EnableItem(myMenus[2], 5);
  145.     EnableItem(myMenus[2], 6);
  146.     DisableItem(myMenus[2], 7);
  147.     DisableItem(myMenus[2], 8);
  148.     }
  149. else {
  150.     DisableItem(myMenus[2], 1);
  151.     if (textsel) checksel();
  152.     fullscreen = (serflg && (!connflg)) ||
  153.                  (tcpflg && logon) ||
  154.                  netconn;
  155.     if (textsel && fullscreen) EnableItem(myMenus[2], 3);    /* Cut */
  156.     else DisableItem(myMenus[2], 3);
  157.     if (textsel) EnableItem(myMenus[2], 4);                    /* Copy */
  158.     else DisableItem(myMenus[2], 4);
  159.     if ((scrapsize > 0) && textsel && fullscreen)            /* Paste */
  160.          EnableItem(myMenus[2], 5);    
  161.     else DisableItem(myMenus[2], 5);
  162.     if (textsel && fullscreen) EnableItem(myMenus[2], 6);    /* Clear */
  163.     else DisableItem(myMenus[2], 6);
  164.     if (textsel) EnableItem(myMenus[2], 7);                    /* Copy Table */
  165.     else DisableItem(myMenus[2], 7);
  166.     if (textsel) EnableItem(myMenus[2], 8);                    /* Copy Text */
  167.     else DisableItem(myMenus[2], 8);
  168. }
  169.     
  170. /* Settings menu */
  171. if (colormac) EnableItem(myMenus[3], 4);
  172.         else DisableItem(myMenus[3], 4);
  173. if ((rowmax9 > 24) || (colmax9 > 80)) EnableItem(myMenus[3], 6);
  174.         else DisableItem(myMenus[3], 6);
  175. msize = CountMItems(kybdMenu);
  176. if (msize > 1) EnableItem(myMenus[3], 9);
  177.         else DisableItem(myMenus[3], 9);
  178. msize = CountMItems(nlMenu);
  179. if (msize > 1) EnableItem(myMenus[3], 10);
  180.         else DisableItem(myMenus[3], 10);
  181.  
  182. /* Network menu */
  183. if (tcpflg) {
  184.     if ((pend_conn == 0) && (logon == 0)) DisableItem(myMenus[5], 2);
  185.     else EnableItem(myMenus[5], 2);
  186.     CheckItem(myMenus[5], 3, ftpavail != 0);
  187.     CheckItem(myMenus[5], 4, MacBinary != 0);
  188.     if (tcp_session()) 
  189.          for (i = 6; i < 12; i++) EnableItem(myMenus[5], i);
  190.     else for (i = 6; i < 12; i++) DisableItem(myMenus[5], i);
  191.     }
  192. }
  193.  
  194. docommand(mResult, append)
  195. long mResult;
  196. char append;
  197. {
  198.     register short theItem, theMenu, i;
  199.     register char name[40];
  200.     WindowRecord * fw;
  201.     static unsigned char brkstr[] = {255, 243};
  202.     static unsigned char ipstr[] = {255, 244};
  203.     static unsigned char aostr[] = {255, 245};
  204.     static unsigned char aytstr[] = {255, 246};
  205.     static unsigned char ecstr[] = {255, 247};
  206.     static unsigned char elstr[] = {255, 248};
  207.     unsigned char itemname[256];
  208.     unsigned char **temph;
  209.     OSErr rc;
  210.  
  211.     theMenu = mResult >> 16;
  212.     theItem = mResult & 0xff;
  213.     switch(theMenu) {
  214.         case langMenu:
  215.             GetItem(nlMenu, theItem, itemname);
  216.             if (theItem > 1) {
  217.                 temph = GetNamedResource('GFNL', itemname);
  218.                 if (temph != 0L) {
  219.                     strcpy(csnlname, itemname);
  220.                     if (GetHandleSize(temph) == 1) {
  221.                         nl_handle = 0;
  222.                         newstdfont(**temph);
  223.                         plainala = 0;
  224.                         }
  225.                     else if (GetHandleSize(temph) == 3) {
  226.                         nl_handle = 0;
  227.                         newstdfont(**temph);
  228.                         plainala = ((*temph)[1] & 0x80) == 0x80;
  229.                         }
  230.                     else {
  231.                         nl_handle = temph;
  232.                         defxtab(nl_handle, nltab);
  233.                         newstdfont(NORMALFONT);
  234.                         plainala = 0;
  235.                         }
  236.                     }
  237.                 }
  238.             else {
  239.                 strcpy(csnlname, itemname);
  240.                 nl_handle = 0;
  241.                 newstdfont(NORMALFONT);
  242.                 plainala = 0;
  243.                 }
  244.             if (myWindow != 0) invldscr();
  245.             break;
  246.         case kmapMenu:
  247.             GetItem(kybdMenu, theItem, itemname);
  248.             temph = GetNamedResource('GFKB', itemname);
  249.             if (temph != 0L) {
  250.                 kb_handle = temph;
  251.                 strcpy(cskybdname, itemname);
  252.                 }
  253.             break;
  254.         case appleMenu:
  255.             if (theItem == 2) break;
  256.             if (theItem == 1) {
  257.                 aboutdlg();
  258.                 if ((myWindow == 0) && showstg) {
  259.                     stginfo();
  260.                     showstg = 0;
  261.                     }
  262.                 break;
  263.                 }
  264.             GETITEM(myMenus[0], theItem, name);
  265.             exportscrap(0);
  266.             OPENDESKACC(name);
  267.             importscrap();
  268.             break;
  269.         case fileMenu:
  270.             switch (theItem) {
  271.                 case 1: if (serflg) serlgin();
  272.                         else if (tcpflg) tcplgin();
  273.                         else netlgin();
  274.                         break;
  275.                 case 2:    closeresponse(closeUser);
  276.                         if (serflg) serlgout(0xe3);
  277.                         else if (tcpflg) tcplgout();
  278.                         else netlgout();
  279.                         break;
  280.                 case 4: dozoom(myWindow, zoomstate());
  281.                         break;
  282.                 case 6: rc = read_settings(0);
  283.                         if (rc != noErr) break;
  284.                         /* Start a new session if there isn't an active one
  285.                            and auto-connect is set */
  286.                         if (serflg && connflg) {
  287.                             break;        /* serial- init. connection mode */
  288.                             }
  289.                         else if (logon || (pend_conn > 0)) {
  290.                             break;        /* connected, or conn. pending */
  291.                             }
  292.                         else if (cs.autoconn) {
  293.                              if (serflg) serlgin();
  294.                             else if (tcpflg) tcplgin();
  295.                             else netlgin();
  296.                             }
  297.                         break;
  298.                 case 7: write_settings();
  299.                         break;
  300.                 case 9:
  301.                         crsetdlg();
  302.                         break;
  303.                 case 11:
  304.                         savepict ^= 1;
  305.                         break;
  306.                 case 13:
  307.                         pgsetup();
  308.                         break;
  309.                 case 14:
  310.                         prscreen();
  311.                         break;
  312.                 case 16:    
  313.                         kabort ^= 1;
  314.                         break;
  315.                 case 17:    
  316.                         if (xdlg) SelectWindow(xdlgptr);
  317.                         break;
  318.                 case 18:
  319.                         if (serflg) serlgout(0xe7);
  320.                         break;
  321.                 case 19:
  322.                         if (!da_menu) {
  323.                             if (wants_to_quit()) done ^= 1;
  324.                             break;
  325.                             }
  326.                         else {
  327.                             fw = (WindowRecord *)FrontWindow();
  328.                             i = fw->windowKind;
  329.                             if (i<0)CloseDeskAcc(i);
  330.                             }
  331.                 default: break;
  332.                 }
  333.             break;
  334.         case editMenu:
  335.             if (da_menu) {
  336.                 SystemEdit(theItem-1);
  337.                 }
  338.             else {
  339.                 switch(theItem) {
  340.                     case 3:    scrapcut(append);
  341.                             break;
  342.                     case 4:    scrapcopy(append);
  343.                             break;
  344.                     case 5:    scrappaste();
  345.                             break;
  346.                     case 6:    scrapclear();
  347.                             break;
  348.                     case 7:    scrapcopytable(append);
  349.                             break;
  350.                     case 8:    scrapcopytext(append);
  351.                             break;
  352.                     default:
  353.                             break;
  354.                     }
  355.                 }
  356.             break;
  357.         case setMenu:
  358.             switch (theItem) {
  359.                 case 1: featdlg();
  360.                         break;
  361.                 case 2: clickdlg();
  362.                         break;
  363.                 case 3: attrdlg();
  364.                         break;
  365.                 case 4: colordlg();
  366.                         if (myWindow != 0) {
  367.                             invldscr();
  368.                             cs.stat_time += 8;    /* force time to be re-drawn */
  369.                             newstat();
  370.                             newinvbw();
  371.                             }
  372.                         break;
  373.                 case 5:
  374.                         psdlg();
  375.                         break;
  376.                 case 6:    fmtdlg();
  377.                         break;
  378.                 case 7:    miscdlg();
  379.                         break;
  380.                 case 8: commdlg();
  381.                         break;
  382.                 default: break;
  383.                 }
  384.             break;
  385.         case fkeyMenu:
  386.             clickattn(theItem);
  387.             break;
  388.         case netMenu:
  389.             switch (theItem) {
  390.                 case 1:    promptip(1);    /* r/o network configuration */
  391.                         break;
  392.                 case 2:    tcpinfo();        /* network status info. */
  393.                         break;
  394.                 case 3:    ftpavail = !ftpavail;    /* FTP Enable */
  395.                         Sftpmode(ftpavail);
  396.                         break;
  397.                 case 4:    MacBinary = !MacBinary;    /* MacBinary mode */
  398.                         break;
  399.                 case 6:    tcpwrite(brkstr, 2);    /* Break */
  400.                         break;
  401.                 case 7:    tcpwrite(ipstr, 2);        /* Interrupt Process */
  402.                         break;
  403.                 case 8:    tcpwrite(aostr, 2);        /* Abort Output */
  404.                         break;
  405.                 case 9:    tcpwrite(aytstr, 2);    /* Are You There? */
  406.                         break;
  407.                 case 10: tcpwrite(ecstr, 2);    /* Erase Character */
  408.                         break;
  409.                 case 11: tcpwrite(elstr, 2);    /* Erase Line */
  410.                         break;
  411.                 default: break;
  412.                 }
  413.             break;
  414.         default:
  415.             break;
  416.         }
  417.         HiliteMenu(0);
  418.         appl_menu();
  419. }
  420.  
  421. clickattn(itm)
  422. short itm;
  423. {
  424. static unsigned char spctab[8] =
  425.     {171, 170, 167, 168, 181, 183, 184, 189};
  426. unsigned char code;
  427.  
  428. if ((itm < 1) | (itm > 32)) return;
  429. if (itm > 24) {
  430.     code = spctab[itm-25];
  431.     }
  432. else code = itm + 142;
  433.  
  434. if (serflg) vmkio(code, 0);
  435. else if (tcpflg) tcpin(0, code, 0);
  436. else netin(code, 0);
  437. }
  438.  
  439. appl_menu()            /* enable correct application menus */
  440. {
  441. static char last_da = 2;    /* init to invalid value */
  442.  
  443. /* skip drawing menu if no changes from last time */
  444. if (last_da == da_menu) return;
  445. last_da = da_menu;        /* save values for next time */
  446.  
  447. if (da_menu) {
  448.     DisableItem(myMenus[3], 0);
  449.     DisableItem(myMenus[4], 0);
  450.     if (tcpflg) DisableItem(myMenus[5], 0);
  451.     }
  452. else {
  453.     EnableItem(myMenus[3], 0);
  454.     EnableItem(myMenus[4], 0);
  455.     if (tcpflg) EnableItem(myMenus[5], 0);
  456.     }
  457. DrawMenuBar();
  458. }
  459.